/*

	La clase String fue creada para conservar la mayor fidelidad con respecto a la etapa de diseño.
	Es poco más que un wrapper de *char.


*/

#ifndef __String_H__
#define __String_H__

#include <iostream>



using namespace std;

class String
{
	public:


		String();

		String(const String &s);

		String(char* st);
		// el constructor crea el String vacio
		// precondición de la función: recibe arreglos de caracteres terminados con el caracter "\0"

		String(string &st);

		void fin();
		// precondición de la función: recibe Strings no nulos

		char primero() const;
		// precondición de la función: recibe Strings no nulos

		bool nulo() const;	

		bool operator==(const String &s) const; 


	friend ostream & operator<<(ostream &o, const String &esp);

	private:
		char *str;



};

String::String() {
	str = " ";

}

String::String(const String &s){
	str = s.str;

}

String::String(string &st) {
	str = &st[0];

}


String::String(char* st) {
	str = &st[0];

}

void String::fin() {

	str++;

}


char String::primero() const {

	return *str;

}

bool String::nulo() const {

	return *str == '\0';	
}

ostream & operator<<(ostream &o, const String &esp) {

	char *indice;
	indice = esp.str;

	while (*indice != '\0') {

		o << *indice;
		indice++;
	}

}

bool String::operator ==(const String &s) const {

	return str == s.str;
	

	
}

#endif 
